#include <QtCore/QByteArray> // for QByteArray
#include <QtCore/QDateTime> // for QDateTime
+#include <QtCore/QHash> // for QHash
#include <QtCore/QList> // for QList
#include <QtCore/QString> // for QString
#include <QtCore/QStringList> // for QStringList
#if CSVFMTS_ENABLED
+/*
+ * Internal numeric value to associate with each keyword in a style file.
+ * To add new keywords, just add an entry here, add it to xcsv_tokens, and
+ * handle it in the switch statements in xcsv.cc.
+ */
+enum xcsv_token {
+ XT_unused = 0,
+ XT_ALT_FEET,
+ XT_ALT_METERS,
+ XT_ANYNAME,
+ XT_CADENCE,
+ XT_CITY,
+ XT_CONSTANT,
+ XT_COUNTRY,
+ XT_DESCRIPTION,
+ XT_EMAIL,
+ XT_EXCEL_TIME,
+ XT_FACILITY,
+ XT_FILENAME,
+ XT_FORMAT,
+ XT_GEOCACHE_CONTAINER,
+ XT_GEOCACHE_DIFF,
+ XT_GEOCACHE_HINT,
+ XT_GEOCACHE_LAST_FOUND,
+ XT_GEOCACHE_PLACER,
+ XT_GEOCACHE_TERR,
+ XT_GEOCACHE_TYPE,
+ XT_GEOCACHE_ISAVAILABLE,
+ XT_GEOCACHE_ISARCHIVED,
+ XT_GMT_TIME,
+ XT_GPS_FIX,
+ XT_GPS_HDOP,
+ XT_GPS_PDOP,
+ XT_GPS_SAT,
+ XT_GPS_VDOP,
+ XT_HEART_RATE,
+ XT_HMSG_TIME,
+ XT_HMSL_TIME,
+ XT_ICON_DESCR,
+ XT_IGNORE,
+ XT_INDEX,
+ XT_ISO_TIME,
+ XT_ISO_TIME_MS,
+ XT_LATLON_HUMAN_READABLE,
+ XT_LAT_DECIMAL,
+ XT_LAT_DECIMALDIR,
+ XT_LAT_DIR,
+ XT_LAT_DIRDECIMAL,
+ XT_LAT_HUMAN_READABLE,
+ XT_LAT_INT32DEG,
+ XT_LAT_DDMMDIR,
+ XT_LAT_NMEA,
+ XT_LOCAL_TIME,
+ XT_LON_DECIMAL,
+ XT_LON_DECIMALDIR,
+ XT_LON_DIR,
+ XT_LON_DIRDECIMAL,
+ XT_LON_HUMAN_READABLE,
+ XT_LON_INT32DEG,
+ XT_LON_DDMMDIR,
+ XT_LON_NMEA,
+ XT_MAP_EN_BNG,
+ XT_NOTES,
+ XT_NET_TIME,
+ XT_PATH_COURSE,
+ XT_PATH_DISTANCE_KM,
+ XT_PATH_DISTANCE_METERS,
+ XT_PATH_DISTANCE_MILES,
+ XT_PATH_SPEED,
+ XT_PATH_SPEED_KNOTS,
+ XT_PATH_SPEED_KPH,
+ XT_PATH_SPEED_MPH,
+ XT_PHONE_NR,
+ XT_POSTAL_CODE,
+ XT_POWER,
+ XT_ROUTE_NAME,
+ XT_SHORTNAME,
+ XT_STATE,
+ XT_STREET_ADDR,
+ XT_TEMPERATURE,
+ XT_TEMPERATURE_F,
+ XT_TIMET_TIME,
+ XT_TIMET_TIME_MS,
+ XT_TRACK_NAME,
+ XT_TRACK_NEW,
+ XT_URL,
+ XT_UTM,
+ XT_UTM_ZONE,
+ XT_UTM_ZONEC,
+ XT_UTM_ZONEF,
+ XT_UTM_EASTING,
+ XT_UTM_NORTHING,
+ XT_URL_LINK_TEXT,
+ XT_YYYYMMDD_TIME
+};
+
+const QHash<QString, xcsv_token> xcsv_tokens {
+ { "ALT_FEET", XT_ALT_FEET },
+ { "ALT_METERS", XT_ALT_METERS },
+ { "ANYNAME", XT_ANYNAME },
+ { "CADENCE", XT_CADENCE },
+ { "CITY", XT_CITY },
+ { "CONSTANT", XT_CONSTANT },
+ { "COUNTRY", XT_COUNTRY },
+ { "DESCRIPTION", XT_DESCRIPTION },
+ { "EMAIL", XT_EMAIL },
+ { "EXCEL_TIME", XT_EXCEL_TIME },
+ { "FACILITY", XT_FACILITY },
+ { "FILENAME", XT_FILENAME },
+ { "FORMAT", XT_FORMAT },
+ { "GEOCACHE_CONTAINER", XT_GEOCACHE_CONTAINER },
+ { "GEOCACHE_DIFF", XT_GEOCACHE_DIFF },
+ { "GEOCACHE_HINT", XT_GEOCACHE_HINT },
+ { "GEOCACHE_ISARCHIVED", XT_GEOCACHE_ISARCHIVED },
+ { "GEOCACHE_ISAVAILABLE", XT_GEOCACHE_ISAVAILABLE },
+ { "GEOCACHE_LAST_FOUND", XT_GEOCACHE_LAST_FOUND },
+ { "GEOCACHE_PLACER", XT_GEOCACHE_PLACER },
+ { "GEOCACHE_TERR", XT_GEOCACHE_TERR },
+ { "GEOCACHE_TYPE", XT_GEOCACHE_TYPE },
+ { "GMT_TIME", XT_GMT_TIME },
+ { "GPS_FIX", XT_GPS_FIX },
+ { "GPS_HDOP", XT_GPS_HDOP },
+ { "GPS_PDOP", XT_GPS_PDOP },
+ { "GPS_SAT", XT_GPS_SAT },
+ { "GPS_VDOP", XT_GPS_VDOP },
+ { "HEART_RATE", XT_HEART_RATE },
+ { "HMSG_TIME", XT_HMSG_TIME },
+ { "HMSL_TIME", XT_HMSL_TIME },
+ { "ICON_DESCR", XT_ICON_DESCR },
+ { "IGNORE", XT_IGNORE },
+ { "INDEX", XT_INDEX },
+ { "ISO_TIME", XT_ISO_TIME },
+ { "ISO_TIME_MS", XT_ISO_TIME_MS },
+ { "LATLON_HUMAN_READABLE", XT_LATLON_HUMAN_READABLE },
+ { "LAT_DDMMDIR", XT_LAT_DDMMDIR },
+ { "LAT_DECIMAL", XT_LAT_DECIMAL },
+ { "LAT_DECIMALDIR", XT_LAT_DECIMALDIR },
+ { "LAT_DIR", XT_LAT_DIR },
+ { "LAT_DIRDECIMAL", XT_LAT_DIRDECIMAL },
+ { "LAT_HUMAN_READABLE", XT_LAT_HUMAN_READABLE },
+ { "LAT_INT32DEG", XT_LAT_INT32DEG },
+ { "LAT_NMEA", XT_LAT_NMEA },
+ { "LOCAL_TIME", XT_LOCAL_TIME },
+ { "LON_DDMMDIR", XT_LON_DDMMDIR },
+ { "LON_DECIMAL", XT_LON_DECIMAL },
+ { "LON_DECIMALDIR", XT_LON_DECIMALDIR },
+ { "LON_DIR", XT_LON_DIR },
+ { "LON_DIRDECIMAL", XT_LON_DIRDECIMAL },
+ { "LON_HUMAN_READABLE", XT_LON_HUMAN_READABLE },
+ { "LON_INT32DEG", XT_LON_INT32DEG },
+ { "LON_NMEA", XT_LON_NMEA },
+ { "MAP_EN_BNG", XT_MAP_EN_BNG },
+ { "NET_TIME", XT_NET_TIME },
+ { "NOTES", XT_NOTES },
+ { "PATH_COURSE", XT_PATH_COURSE },
+ { "PATH_DISTANCE_KM", XT_PATH_DISTANCE_KM },
+ { "PATH_DISTANCE_METERS", XT_PATH_DISTANCE_METERS },
+ { "PATH_DISTANCE_MILES", XT_PATH_DISTANCE_MILES },
+ { "PATH_SPEED", XT_PATH_SPEED },
+ { "PATH_SPEED_KNOTS", XT_PATH_SPEED_KNOTS },
+ { "PATH_SPEED_KPH", XT_PATH_SPEED_KPH },
+ { "PATH_SPEED_MPH", XT_PATH_SPEED_MPH },
+ { "PHONE_NR", XT_PHONE_NR },
+ { "POSTAL_CODE", XT_POSTAL_CODE },
+ { "POWER", XT_POWER },
+ { "ROUTE_NAME", XT_ROUTE_NAME },
+ { "SHORTNAME", XT_SHORTNAME },
+ { "STATE", XT_STATE },
+ { "STREET_ADDR", XT_STREET_ADDR },
+ { "TEMPERATURE", XT_TEMPERATURE },
+ { "TEMPERATURE_F", XT_TEMPERATURE_F },
+ { "TIMET_TIME", XT_TIMET_TIME },
+ { "TIMET_TIME_MS", XT_TIMET_TIME_MS },
+ { "TRACK_NAME", XT_TRACK_NAME },
+ { "TRACK_NEW", XT_TRACK_NEW },
+ { "URL", XT_URL },
+ { "URL_LINK_TEXT", XT_URL_LINK_TEXT },
+ { "UTM", XT_UTM },
+ { "UTM_EASTING", XT_UTM_EASTING },
+ { "UTM_NORTHING", XT_UTM_NORTHING },
+ { "UTM_ZONE", XT_UTM_ZONE },
+ { "UTM_ZONEC", XT_UTM_ZONEC },
+ { "UTM_ZONEF", XT_UTM_ZONEF },
+ { "YYYYMMDD_TIME", XT_YYYYMMDD_TIME }
+};
+
/*
* Class describing an xcsv format.
*/
+++ /dev/null
-/* C++ code produced by gperf version 3.1 */
-/* Command-line: gperf --output-file=xcsv_tokens.gperf -L C++ -D -t xcsv_tokens.in */
-/* Computed positions: -k'2,4-5,12,$' */
-
-#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
- && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
- && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
- && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
- && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
- && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
- && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
- && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
- && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
- && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
- && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
- && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
- && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
- && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
- && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
- && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
- && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
- && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
- && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
- && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
- && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
- && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
- && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
-/* The character set is not based on ISO-646. */
-#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
-#endif
-
-#line 1 "xcsv_tokens.in"
-struct xt_mapping {const char *name; int xt_token; };
-
-#define TOTAL_KEYWORDS 87
-#define MIN_WORD_LENGTH 3
-#define MAX_WORD_LENGTH 21
-#define MIN_HASH_VALUE 7
-#define MAX_HASH_VALUE 248
-/* maximum key range = 242, duplicates = 0 */
-
-class Perfect_Hash
-{
-private:
- static inline unsigned int hash (const char *str, size_t len);
-public:
- static struct xt_mapping *in_word_set (const char *str, size_t len);
-};
-
-inline unsigned int
-Perfect_Hash::hash (const char *str, size_t len)
-{
- static unsigned char asso_values[] =
- {
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 0, 249, 25, 0, 0,
- 10, 90, 60, 25, 249, 30, 65, 25, 20, 5,
- 80, 249, 0, 70, 15, 249, 0, 0, 40, 30,
- 85, 249, 249, 249, 249, 0, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 249
- };
- unsigned int hval = len;
-
- switch (hval)
- {
- default:
- hval += asso_values[static_cast<unsigned char>(str[11])];
- /*FALLTHROUGH*/
- case 11:
- case 10:
- case 9:
- case 8:
- case 7:
- case 6:
- case 5:
- hval += asso_values[static_cast<unsigned char>(str[4])];
- /*FALLTHROUGH*/
- case 4:
- hval += asso_values[static_cast<unsigned char>(str[3])];
- /*FALLTHROUGH*/
- case 3:
- case 2:
- hval += asso_values[static_cast<unsigned char>(str[1])];
- break;
- }
- return hval + asso_values[static_cast<unsigned char>(str[len - 1])];
-}
-
-struct xt_mapping *
-Perfect_Hash::in_word_set (const char *str, size_t len)
-{
- static struct xt_mapping wordlist[] =
- {
-#line 42 "xcsv_tokens.in"
- {"LAT_DIR", XT_LAT_DIR},
-#line 70 "xcsv_tokens.in"
- {"POWER", XT_POWER},
-#line 46 "xcsv_tokens.in"
- {"LAT_DDMMDIR", XT_LAT_DDMMDIR},
-#line 52 "xcsv_tokens.in"
- {"LON_DIR", XT_LON_DIR},
-#line 39 "xcsv_tokens.in"
- {"LAT_DECIMALDIR", XT_LAT_DECIMALDIR},
-#line 55 "xcsv_tokens.in"
- {"LON_DDMMDIR", XT_LON_DDMMDIR},
-#line 49 "xcsv_tokens.in"
- {"LON_DECIMALDIR", XT_LON_DECIMALDIR},
-#line 59 "xcsv_tokens.in"
- {"NET_TIME", XT_NET_TIME},
-#line 31 "xcsv_tokens.in"
- {"HEART_RATE", XT_HEART_RATE},
-#line 74 "xcsv_tokens.in"
- {"STREET_ADDR", XT_STREET_ADDR},
-#line 6 "xcsv_tokens.in"
- {"CADENCE", XT_CADENCE},
-#line 47 "xcsv_tokens.in"
- {"LAT_NMEA", XT_LAT_NMEA},
-#line 71 "xcsv_tokens.in"
- {"ROUTE_NAME", XT_ROUTE_NAME},
-#line 69 "xcsv_tokens.in"
- {"POSTAL_CODE", XT_POSTAL_CODE},
-#line 56 "xcsv_tokens.in"
- {"LON_NMEA", XT_LON_NMEA},
-#line 73 "xcsv_tokens.in"
- {"STATE", XT_STATE},
-#line 23 "xcsv_tokens.in"
- {"GEOCACHE_TERR", XT_GEOCACHE_TERR},
-#line 22 "xcsv_tokens.in"
- {"GEOCACHE_PLACER", XT_GEOCACHE_PLACER},
-#line 83 "xcsv_tokens.in"
- {"UTM", XT_UTM},
-#line 19 "xcsv_tokens.in"
- {"GEOCACHE_ISARCHIVED", XT_GEOCACHE_ISARCHIVED},
-#line 20 "xcsv_tokens.in"
- {"GEOCACHE_ISAVAILABLE", XT_GEOCACHE_ISAVAILABLE},
-#line 5 "xcsv_tokens.in"
- {"ANYNAME", XT_ANYNAME},
-#line 25 "xcsv_tokens.in"
- {"GMT_TIME", XT_GMT_TIME},
-#line 77 "xcsv_tokens.in"
- {"TIMET_TIME", XT_TIMET_TIME},
-#line 15 "xcsv_tokens.in"
- {"FORMAT", XT_FORMAT},
-#line 14 "xcsv_tokens.in"
- {"FILENAME", XT_FILENAME},
-#line 34 "xcsv_tokens.in"
- {"ICON_DESCR", XT_ICON_DESCR},
-#line 10 "xcsv_tokens.in"
- {"DESCRIPTION", XT_DESCRIPTION},
-#line 17 "xcsv_tokens.in"
- {"GEOCACHE_DIFF", XT_GEOCACHE_DIFF},
-#line 16 "xcsv_tokens.in"
- {"GEOCACHE_CONTAINER", XT_GEOCACHE_CONTAINER},
-#line 80 "xcsv_tokens.in"
- {"TRACK_NEW", XT_TRACK_NEW},
-#line 79 "xcsv_tokens.in"
- {"TRACK_NAME", XT_TRACK_NAME},
-#line 82 "xcsv_tokens.in"
- {"URL", XT_URL},
-#line 67 "xcsv_tokens.in"
- {"PATH_SPEED", XT_PATH_SPEED},
-#line 60 "xcsv_tokens.in"
- {"PATH_COURSE", XT_PATH_COURSE},
-#line 18 "xcsv_tokens.in"
- {"GEOCACHE_HINT", XT_GEOCACHE_HINT},
-#line 40 "xcsv_tokens.in"
- {"LAT_DECIMAL", XT_LAT_DECIMAL},
-#line 9 "xcsv_tokens.in"
- {"COUNTRY", XT_COUNTRY},
-#line 43 "xcsv_tokens.in"
- {"LAT_HUMAN_READABLE", XT_LAT_HUMAN_READABLE},
-#line 48 "xcsv_tokens.in"
- {"LOCAL_TIME", XT_LOCAL_TIME},
-#line 50 "xcsv_tokens.in"
- {"LON_DECIMAL", XT_LON_DECIMAL},
-#line 53 "xcsv_tokens.in"
- {"LON_HUMAN_READABLE", XT_LON_HUMAN_READABLE},
-#line 72 "xcsv_tokens.in"
- {"SHORTNAME", XT_SHORTNAME},
-#line 68 "xcsv_tokens.in"
- {"PHONE_NR", XT_PHONE_NR},
-#line 7 "xcsv_tokens.in"
- {"CITY", XT_CITY},
-#line 75 "xcsv_tokens.in"
- {"TEMPERATURE", XT_TEMPERATURE},
-#line 38 "xcsv_tokens.in"
- {"ISO_TIME", XT_ISO_TIME},
-#line 3 "xcsv_tokens.in"
- {"ALT_FEET", XT_ALT_FEET},
-#line 33 "xcsv_tokens.in"
- {"HMSL_TIME", XT_HMSL_TIME},
-#line 57 "xcsv_tokens.in"
- {"MAP_EN_BNG", XT_MAP_EN_BNG},
-#line 35 "xcsv_tokens.in"
- {"IGNORE", XT_IGNORE},
-#line 76 "xcsv_tokens.in"
- {"TEMPERATURE_F", XT_TEMPERATURE_F},
-#line 41 "xcsv_tokens.in"
- {"LAT_DIRDECIMAL", XT_LAT_DIRDECIMAL},
-#line 36 "xcsv_tokens.in"
- {"INDEX", XT_INDEX},
-#line 84 "xcsv_tokens.in"
- {"UTM_ZONE", XT_UTM_ZONE},
-#line 51 "xcsv_tokens.in"
- {"LON_DIRDECIMAL", XT_LON_DIRDECIMAL},
-#line 45 "xcsv_tokens.in"
- {"LATLON_HUMAN_READABLE", XT_LATLON_HUMAN_READABLE},
-#line 8 "xcsv_tokens.in"
- {"CONSTANT", XT_CONSTANT},
-#line 21 "xcsv_tokens.in"
- {"GEOCACHE_LAST_FOUND", XT_GEOCACHE_LAST_FOUND},
-#line 12 "xcsv_tokens.in"
- {"EXCEL_TIME", XT_EXCEL_TIME},
-#line 87 "xcsv_tokens.in"
- {"UTM_EASTING", XT_UTM_EASTING},
-#line 24 "xcsv_tokens.in"
- {"GEOCACHE_TYPE", XT_GEOCACHE_TYPE},
-#line 86 "xcsv_tokens.in"
- {"UTM_ZONEF", XT_UTM_ZONEF},
-#line 89 "xcsv_tokens.in"
- {"YYYYMMDD_TIME", XT_YYYYMMDD_TIME},
-#line 32 "xcsv_tokens.in"
- {"HMSG_TIME", XT_HMSG_TIME},
-#line 61 "xcsv_tokens.in"
- {"PATH_DISTANCE_KM", XT_PATH_DISTANCE_KM},
-#line 13 "xcsv_tokens.in"
- {"FACILITY", XT_FACILITY},
-#line 81 "xcsv_tokens.in"
- {"URL_LINK_TEXT", XT_URL_LINK_TEXT},
-#line 85 "xcsv_tokens.in"
- {"UTM_ZONEC", XT_UTM_ZONEC},
-#line 26 "xcsv_tokens.in"
- {"GPS_FIX", XT_GPS_FIX},
-#line 78 "xcsv_tokens.in"
- {"TIMET_TIME_MS", XT_TIMET_TIME_MS},
-#line 58 "xcsv_tokens.in"
- {"NOTES", XT_NOTES},
-#line 66 "xcsv_tokens.in"
- {"PATH_SPEED_MPH", XT_PATH_SPEED_MPH},
-#line 65 "xcsv_tokens.in"
- {"PATH_SPEED_KPH", XT_PATH_SPEED_KPH},
-#line 37 "xcsv_tokens.in"
- {"ISO_TIME_MS", XT_ISO_TIME_MS},
-#line 30 "xcsv_tokens.in"
- {"GPS_VDOP", XT_GPS_VDOP},
-#line 4 "xcsv_tokens.in"
- {"ALT_METERS", XT_ALT_METERS},
-#line 29 "xcsv_tokens.in"
- {"GPS_SAT", XT_GPS_SAT},
-#line 63 "xcsv_tokens.in"
- {"PATH_DISTANCE_MILES", XT_PATH_DISTANCE_MILES},
-#line 62 "xcsv_tokens.in"
- {"PATH_DISTANCE_METERS", XT_PATH_DISTANCE_METERS},
-#line 64 "xcsv_tokens.in"
- {"PATH_SPEED_KNOTS", XT_PATH_SPEED_KNOTS},
-#line 11 "xcsv_tokens.in"
- {"EMAIL", XT_EMAIL},
-#line 44 "xcsv_tokens.in"
- {"LAT_INT32DEG", XT_LAT_INT32DEG},
-#line 54 "xcsv_tokens.in"
- {"LON_INT32DEG", XT_LON_INT32DEG},
-#line 88 "xcsv_tokens.in"
- {"UTM_NORTHING", XT_UTM_NORTHING},
-#line 27 "xcsv_tokens.in"
- {"GPS_HDOP", XT_GPS_HDOP},
-#line 28 "xcsv_tokens.in"
- {"GPS_PDOP", XT_GPS_PDOP}
- };
-
- static signed char lookup[] =
- {
- -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 1, 2, 3, -1,
- 4, -1, 5, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
- 11, -1, 12, 13, -1, 14, -1, 15, -1, -1, 16, -1, 17, -1,
- -1, 18, 19, 20, -1, 21, 22, -1, 23, 24, -1, 25, -1, 26,
- 27, -1, 28, -1, -1, -1, -1, 29, 30, 31, -1, -1, 32, -1,
- 33, 34, -1, 35, -1, -1, 36, 37, 38, -1, 39, 40, -1, 41,
- 42, -1, -1, -1, 43, 44, -1, 45, -1, 46, -1, -1, -1, -1,
- 47, 48, 49, 50, -1, 51, 52, 53, -1, -1, 54, 55, -1, 56,
- -1, 57, 58, 59, 60, -1, 61, 62, -1, -1, -1, 63, 64, -1,
- 65, -1, 66, -1, -1, -1, -1, 67, 68, -1, -1, 69, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 70, -1, 71, -1, -1, -1,
- -1, -1, -1, -1, -1, 72, -1, -1, -1, -1, 73, -1, 74, -1,
- 75, -1, 76, -1, 77, -1, 78, 79, 80, -1, -1, -1, -1, -1,
- -1, -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 82, -1, -1, -1, -1, 83, -1,
- -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 86
- };
-
- if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
- {
- unsigned int key = hash (str, len);
-
- if (key <= MAX_HASH_VALUE)
- {
- int index = lookup[key];
-
- if (index >= 0)
- {
- const char *s = wordlist[index].name;
-
- if (*str == *s && !strcmp (str + 1, s + 1))
- return &wordlist[index];
- }
- }
- }
- return 0;
-}